package com.haojin.java;
/*
 * abstract关键字的使用
 * 1.abstract：抽象的
 * 2.abstract可以用来修饰结构，类，方法
 * 
 * 3.abstract 修饰类，抽象类
 *          >此类不能实例化
 *          >抽象类中一定有构造器，便于子类实例化时调用
 *          >开发中，都会提供抽象类的子类，让子类对象实例化完成相关操作
 * 
 * 4.abstract 修饰方法，抽象方法
 *          >抽象方法只有方法的声明，没有方法体
 *          >包含抽象方法的类，一定是一个抽象类，反之，抽象类中可以没有抽象方法
 *          >若子类重写了父类中的所有抽象方法后，次子类方可实例化
 *           若子类没有重写父类中所有的抽象方法，则子类也是一个抽象类，需要用abstract修饰
 *           
 * abstract使用上的注意点：
 *       abstract不能用来修饰：属性，构造器等结构
 *       
 *       abstract不能用来修饰私有方法，静态方法，final的方法，final的类
 * 
 * 
 */
public class AbstractTest {
public static void main(String[] args) {

	//不可实例化
	//	Person p = new Person();
	//	p.eat();
}
}
abstract class Person{
	String name;
	int age;
	
	public Person(){}
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	//抽象方法
	public abstract void sleep();
	
	public void eat(){
		System.out.println("人吃饭");
	}
	public void walk(){
		System.out.println("人走路");
	}
}

class Student extends Person{
	public Student(String name,int age){
		super(name,age);
	}
	
	public Student(){
		
	}
	public void sleep(){
		System.out.println("学生早睡早起。");
	}
}